#include "gpio.h"

void GPIO_Init(GPIO_Type* GPIOx,int GPIO_Pin_y,GPIO_Config* GPIO_InitStruct)
{
    // 输出引脚初始化
    if(GPIO_InitStruct->direction == output)
    {
        //1. 配置引脚的方向寄存器为输出 bit[y]=1
        GPIOx->GDIR |= (1<<GPIO_Pin_y);
        //2. 向输出引脚写入默认电平 bit[y]=level
       GPIO_Write(GPIOx,GPIO_Pin_y,(GPIO_InitStruct->level));
    }
    // 输入引脚初始化
    else
    {
        //1. 配置引脚的方向寄存器为输入 bit[y]=0
        GPIOx->GDIR &= ~(1<<GPIO_Pin_y);
    }
}

// 向输出引脚写入具体数值
void GPIO_Write(GPIO_Type* GPIOx,int GPIO_Pin_y,int value)
{
    if(value==0U)
    {
        GPIOx->DR &= ~(1<<GPIO_Pin_y);
    }
    else if (value == 1U)
    {
        GPIOx->DR |= (1<<GPIO_Pin_y);
    }
}

// 从输入引脚读取数值
int GPIO_Read(GPIO_Type* GPIOx,int GPIO_Pin_y)
{
    int value=0;
    value= ((GPIOx->DR)>>GPIO_Pin_y) & 0x1;
    return value;
}







